package com.zxjbyte.yiyi.framework.common.annotation;

import com.zxjbyte.yiyi.framework.common.core.ObjectArrayFactory;
import com.zxjbyte.yiyi.framework.common.annotation.validated.InEnumValueValidator;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

/**
 * 可以校验基本数据类型，是否属于enumClass的枚举值
 * 如果入参是枚举类型添加此注解，在传值时时非枚举值范围，则会抛HttpMessageNotReadableException异常
 * 而不会进入到InEnumValueValidator方法
 * @Author zhangxingjia
 * @Date 2023/3/15 17:35
 * @Version: 1.0
 */
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(
        validatedBy = InEnumValueValidator.class
)
public @interface InEnumValue {

    /**
     * 指定枚举类的类型
     */
    Class<? extends ObjectArrayFactory> enumClass();

    /**
     * 校验失败时的错误提示信息
     */
    String message() default "必须在指定范围 [%s]";

    /**
     * 是否忽略大小写，默认为 false, 只针对String类型有效
     */
    boolean ignoreCase() default false;

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}
